diff --git a/gcc/analyzer/analysis-plan.cc b/gcc/analyzer/analysis-plan.cc
index 7dfc48e9c3e..223eba37761 100644
--- a/gcc/analyzer/analysis-plan.cc
+++ b/gcc/analyzer/analysis-plan.cc
@@ -40,6 +40,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "basic-block.h"
 #include "gimple.h"
 #include "gimple-iterator.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "analyzer/supergraph.h"
 
diff --git a/gcc/analyzer/call-string.cc b/gcc/analyzer/call-string.cc
index 9f4f77ab3a9..1489b687966 100644
--- a/gcc/analyzer/call-string.cc
+++ b/gcc/analyzer/call-string.cc
@@ -34,6 +34,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "basic-block.h"
 #include "gimple.h"
 #include "gimple-iterator.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "analyzer/supergraph.h"
 
diff --git a/gcc/analyzer/checker-path.cc b/gcc/analyzer/checker-path.cc
index e10c8e2bb7c..0d1e3f9bdd0 100644
--- a/gcc/analyzer/checker-path.cc
+++ b/gcc/analyzer/checker-path.cc
@@ -33,6 +33,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "cgraph.h"
 #include "function.h"
 #include "cfg.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "alloc-pool.h"
 #include "fibonacci_heap.h"
diff --git a/gcc/analyzer/complexity.cc b/gcc/analyzer/complexity.cc
index ece4272ff6e..4d6d0900eda 100644
--- a/gcc/analyzer/complexity.cc
+++ b/gcc/analyzer/complexity.cc
@@ -48,6 +48,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "options.h"
 #include "cgraph.h"
 #include "cfg.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "analyzer/call-string.h"
 #include "analyzer/program-point.h"
diff --git a/gcc/analyzer/constraint-manager.cc b/gcc/analyzer/constraint-manager.cc
index 51cf52258a9..b62e91bf28d 100644
--- a/gcc/analyzer/constraint-manager.cc
+++ b/gcc/analyzer/constraint-manager.cc
@@ -37,6 +37,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "options.h"
 #include "cgraph.h"
 #include "cfg.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "analyzer/supergraph.h"
 #include "sbitmap.h"
diff --git a/gcc/analyzer/diagnostic-manager.cc b/gcc/analyzer/diagnostic-manager.cc
index 7eb4ed8a4f2..db548191313 100644
--- a/gcc/analyzer/diagnostic-manager.cc
+++ b/gcc/analyzer/diagnostic-manager.cc
@@ -53,6 +53,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "gimple.h"
 #include "gimple-iterator.h"
 #include "cgraph.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "analyzer/supergraph.h"
 #include "analyzer/program-state.h"
diff --git a/gcc/analyzer/engine.cc b/gcc/analyzer/engine.cc
index 4456d9b828b..c6f44adc42e 100644
--- a/gcc/analyzer/engine.cc
+++ b/gcc/analyzer/engine.cc
@@ -54,6 +54,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "gimple-iterator.h"
 #include "gimple-pretty-print.h"
 #include "cgraph.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "analyzer/supergraph.h"
 #include "analyzer/program-state.h"
diff --git a/gcc/analyzer/feasible-graph.cc b/gcc/analyzer/feasible-graph.cc
index 675bda9e7e5..426c2d46c28 100644
--- a/gcc/analyzer/feasible-graph.cc
+++ b/gcc/analyzer/feasible-graph.cc
@@ -53,6 +53,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "gimple.h"
 #include "gimple-iterator.h"
 #include "cgraph.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "analyzer/supergraph.h"
 #include "analyzer/program-state.h"
diff --git a/gcc/analyzer/program-point.cc b/gcc/analyzer/program-point.cc
index d8cfc61975e..de6aa13ae1c 100644
--- a/gcc/analyzer/program-point.cc
+++ b/gcc/analyzer/program-point.cc
@@ -34,6 +34,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "basic-block.h"
 #include "gimple.h"
 #include "gimple-iterator.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "analyzer/analyzer.h"
 #include "analyzer/analyzer-logging.h"
diff --git a/gcc/analyzer/program-state.cc b/gcc/analyzer/program-state.cc
index 6d60c0449ce..1bda91b6912 100644
--- a/gcc/analyzer/program-state.cc
+++ b/gcc/analyzer/program-state.cc
@@ -51,6 +51,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "gimple.h"
 #include "gimple-iterator.h"
 #include "cgraph.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "analyzer/supergraph.h"
 #include "analyzer/program-state.h"
diff --git a/gcc/analyzer/region-model-impl-calls.cc b/gcc/analyzer/region-model-impl-calls.cc
index 466d397ec49..f6a5602aac0 100644
--- a/gcc/analyzer/region-model-impl-calls.cc
+++ b/gcc/analyzer/region-model-impl-calls.cc
@@ -49,6 +49,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "options.h"
 #include "cgraph.h"
 #include "cfg.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "analyzer/supergraph.h"
 #include "sbitmap.h"
diff --git a/gcc/analyzer/region-model-manager.cc b/gcc/analyzer/region-model-manager.cc
index 55acb90da73..1f511d8610a 100644
--- a/gcc/analyzer/region-model-manager.cc
+++ b/gcc/analyzer/region-model-manager.cc
@@ -49,6 +49,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "options.h"
 #include "cgraph.h"
 #include "cfg.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "analyzer/supergraph.h"
 #include "sbitmap.h"
diff --git a/gcc/analyzer/region-model-reachability.cc b/gcc/analyzer/region-model-reachability.cc
index e165cda014f..29e2dbcef6d 100644
--- a/gcc/analyzer/region-model-reachability.cc
+++ b/gcc/analyzer/region-model-reachability.cc
@@ -46,6 +46,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "options.h"
 #include "cgraph.h"
 #include "cfg.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "json.h"
 #include "analyzer/call-string.h"
diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc
index 4fb6bc9f747..ddd8370def4 100644
--- a/gcc/analyzer/region-model.cc
+++ b/gcc/analyzer/region-model.cc
@@ -49,6 +49,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "options.h"
 #include "cgraph.h"
 #include "cfg.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "analyzer/supergraph.h"
 #include "sbitmap.h"
diff --git a/gcc/analyzer/region.cc b/gcc/analyzer/region.cc
index 46337179162..c340c448ba7 100644
--- a/gcc/analyzer/region.cc
+++ b/gcc/analyzer/region.cc
@@ -51,6 +51,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "options.h"
 #include "cgraph.h"
 #include "cfg.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "analyzer/supergraph.h"
 #include "sbitmap.h"
diff --git a/gcc/analyzer/sm-signal.cc b/gcc/analyzer/sm-signal.cc
index 42be8094997..f1e0aed380a 100644
--- a/gcc/analyzer/sm-signal.cc
+++ b/gcc/analyzer/sm-signal.cc
@@ -48,6 +48,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "analyzer/region-model.h"
 #include "analyzer/program-state.h"
 #include "analyzer/checker-path.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "cfg.h"
 #include "gimple-iterator.h"
diff --git a/gcc/analyzer/state-purge.cc b/gcc/analyzer/state-purge.cc
index 70a09ed581f..9a72c68f277 100644
--- a/gcc/analyzer/state-purge.cc
+++ b/gcc/analyzer/state-purge.cc
@@ -40,6 +40,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "json.h"
 #include "analyzer/analyzer.h"
 #include "analyzer/call-string.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "ordered-hash-map.h"
 #include "cfg.h"
diff --git a/gcc/analyzer/store.cc b/gcc/analyzer/store.cc
index a65c7415b1b..91b2aaf5d34 100644
--- a/gcc/analyzer/store.cc
+++ b/gcc/analyzer/store.cc
@@ -49,6 +49,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "options.h"
 #include "cgraph.h"
 #include "cfg.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "analyzer/supergraph.h"
 #include "sbitmap.h"
diff --git a/gcc/analyzer/supergraph.cc b/gcc/analyzer/supergraph.cc
index 8611d0f8689..2d9b914423e 100644
--- a/gcc/analyzer/supergraph.cc
+++ b/gcc/analyzer/supergraph.cc
@@ -49,6 +49,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "options.h"
 #include "cgraph.h"
 #include "cfg.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "analyzer/supergraph.h"
 #include "analyzer/analyzer-logging.h"
diff --git a/gcc/analyzer/svalue.cc b/gcc/analyzer/svalue.cc
index 6c8afef461b..8b44dd02652 100644
--- a/gcc/analyzer/svalue.cc
+++ b/gcc/analyzer/svalue.cc
@@ -48,6 +48,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "options.h"
 #include "cgraph.h"
 #include "cfg.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "analyzer/call-string.h"
 #include "analyzer/program-point.h"
diff --git a/gcc/analyzer/trimmed-graph.cc b/gcc/analyzer/trimmed-graph.cc
index 2e23a0960b6..0a517d86981 100644
--- a/gcc/analyzer/trimmed-graph.cc
+++ b/gcc/analyzer/trimmed-graph.cc
@@ -53,6 +53,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "gimple.h"
 #include "gimple-iterator.h"
 #include "cgraph.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "analyzer/supergraph.h"
 #include "analyzer/program-state.h"
diff --git a/gcc/digraph.cc b/gcc/digraph.cc
index e6966b076ca..162d58b98d1 100644
--- a/gcc/digraph.cc
+++ b/gcc/digraph.cc
@@ -23,6 +23,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "coretypes.h"
 #include "diagnostic.h"
 #include "graphviz.h"
+#include "toplev.h"
 #include "digraph.h"
 #include "shortest-paths.h"
 #include "selftest.h"
diff --git a/gcc/digraph.h b/gcc/digraph.h
index 8b71b64a739..d1e13b7ab7f 100644
--- a/gcc/digraph.h
+++ b/gcc/digraph.h
@@ -217,6 +217,9 @@ digraph<GraphTraits>::dump_dot (const char *path,
 				const dump_args_t &args) const
 {
   FILE *fp = fopen (path, "w");
+  fprintf (fp, "/* graph generated by GNU GCC Compiler version\n");
+  print_version (fp, " *", true);
+  fprintf (fp, "*/\n");
   dump_dot_to_file (fp, root_cluster, args);
   fclose (fp);
 }
diff --git a/gcc/graph.c b/gcc/graph.c
index ce8de33ffe1..ee3b0c39613 100644
--- a/gcc/graph.c
+++ b/gcc/graph.c
@@ -30,6 +30,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "cfgloop.h"
 #include "graph.h"
 #include "dumpfile.h"
+#include "toplev.h"
 
 /* DOT files with the .dot extension are recognized as document templates
    by a well-known piece of word processing software out of Redmond, WA.
@@ -354,6 +355,9 @@ start_graph_dump (FILE *fp, const char *base)
   pretty_printer graph_slim_pp;
   graph_slim_pp.buffer->stream = fp;
   pretty_printer *const pp = &graph_slim_pp;
+  fprintf (fp, "/* graph generated by GNU GCC Compiler version\n");
+  print_version (fp, " *", true);
+  fprintf (fp, "*/\n");
   pp_string (pp, "digraph \"");
   pp_write_text_to_stream (pp);
   pp_string (pp, base);
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 43f1f7d345e..adbb56f1681 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1930,6 +1930,9 @@ lang_dependent_init (const char *name)
 	    {
 	      callgraph_info_file = open_auxiliary_file ("ci");
 	      /* Write the file header.  */
+	      fprintf (callgraph_info_file,"/* callgraph generated by GNU GCC Compiler -fcallgraph-info option version\n");
+	      print_version (callgraph_info_file, " *", true);
+	      fprintf (callgraph_info_file, "*/\n");
 	      fprintf (callgraph_info_file,
 		       "graph: { title: \"%s\"\n", main_input_filename);
 	      bitmap_obstack_initialize (NULL);
